package com.itheima.sh.esdemo.demo;

import com.alibaba.fastjson.JSON;
import com.itheima.sh.esdemo.pojo.User;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

/**
 * 文档 CRUD
 *
 * @作者 itcast
 * @创建日期 2021/5/12 18:28
 **/
public class EsDemo02 {
    RestHighLevelClient client;
    /**
     * 添加文档
     */
    @Test
    public void addDocument() throws IOException {
        // 准备数据
        User user = new User(1L,"鲁班",18,"1","鲁班在河道唱着歌222222");
        // 1. 创建请求对象  IndexRequest
        IndexRequest request = new IndexRequest("user");
        // 1.1 设置文档的id
        request.id(String.valueOf(user.getId()));
        // 1.2 设置文档内容
        // 参数1 文档的json字符串   参数2 指定类型为json
        request.source(JSON.toJSONString(user),XContentType.JSON);
        // 2. 执行请求对象
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);
        // 3. 解析响应结果
        System.out.println(response.getResult()); // created  updated  deleted
    }
    /**
     * 查看文档
     */
    @Test
    public void findDocumentById() throws IOException {
        // 准备数据
        // 1. 创建请求对象  GetRequest
        GetRequest request = new GetRequest("user","1");
        // 2. 执行请求对象
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        // 3. 解析响应结果
        String userJson = response.getSourceAsString(); // 得到user的json字符串
        User user = JSON.parseObject(userJson, User.class);
        System.out.println(user);
    }

    @Test
    public void delete() throws IOException {
        // 准备数据
        // 1. 创建请求对象  GetRequest
        DeleteRequest request = new DeleteRequest("user","1");
        // 2. 执行请求对象
        DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
        // 3. 解析响应结果
        System.out.println(response.getResult());
    }

    @Test
    public void update() throws IOException {
        // 准备数据
        UpdateRequest request = new UpdateRequest("user","1");
        request.doc("gender","0");
        UpdateResponse update = client.update(request, RequestOptions.DEFAULT);
        System.out.println(update.getResult());
    }
    @Test
    public void bulk() throws IOException {
        // 准备要批量导入的数据
        List<User> userList = Arrays.asList(
                new User(1L, "Rose", 18, "1", "Rose同学在传智播客学表演"),
                new User(2L, "Jack", 38, "1", "Jack同学在黑马学JavaEE"),
                new User(3L, "小红", 23, "0", "小红同学在传智播客学唱歌"),
                new User(4L, "小明", 20, "1", "小明同学在黑马学JavaSE"),
                new User(5L, "达摩", 33, "1", "达摩和尚在达摩院学唱歌"),
                new User(6L, "鲁班", 24, "1", "鲁班同学走在乡间小路上"),
                new User(7L, "孙尚香", 26, "0", "孙尚香同学想带阿斗回东吴"),
                new User(8L, "李白", 27, "1", "李白同学在山顶喝着酒唱着歌"),
                new User(9L, "甄姬", 28, "0", "甄姬同学弹奏一曲东风破"),
                new User(10L, "虞姬", 27, "0", "虞姬同学在和项羽谈情说爱")
        );
        // 1. 创建批量导入请求对象   BulkRequest
        BulkRequest request = new BulkRequest("user");
        // 1.1 遍历集合数据
        for (User user : userList) {
            // 1.2 每条数据都封装IndexRequest请求
            IndexRequest indexRequest = new IndexRequest();
            // 设置ID
            indexRequest.id(String.valueOf(user.getId()));
            // 设置文档内容
            indexRequest.source(JSON.toJSONString(user),XContentType.JSON);
            // 1.3 将IndexRequest对象添加到批处理请求中
            request.add(indexRequest);
        }
        // 2. 调用客户端执行批量请求
        BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
        // 3. 得到响应结果
        System.out.println(responses.status());
    }


    @Before
    public void init(){
        client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("192.168.200.130", 9200, "http")));
    }
    @After
    public void close(){
        try {
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
